<?php
namespace app\apijson\query\operators;

class InOperator
{
    public static function apply($query, $value)
    {
        // 支持 IN 查询，格式：{"id": "1,2,3", "name": "2,3,4"}
        if (is_array($value)) {
            foreach ($value as $field => $values) {
                if (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_.*]*$/', $field)) {
                    throw new \app\apijson\core\ApiJsonException('非法的 IN 字段: ' . $field);
                }
                if (is_string($values)) {
                    // 字符串格式：逗号分隔的值
                    $valueArray = array_map('trim', explode(',', $values));
                    $valueArray = array_filter($valueArray, function($v) { return $v !== ''; });
                    if (!empty($valueArray)) {
                        $query->whereIn($field, $valueArray);
                    }
                } elseif (is_array($values)) {
                    // 数组格式
                    if (!empty($values)) {
                        $query->whereIn($field, $values);
                    }
                } else {
                    throw new \app\apijson\core\ApiJsonException('IN 值必须是字符串或数组格式: ' . json_encode($values));
                }
            }
        } else {
            throw new \app\apijson\core\ApiJsonException('@in 必须是对象格式');
        }
    }
} 